package com.qf.zhijia.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.zhijia.pojo.Product;
import com.qf.zhijia.pojo.Theme;
import com.qf.zhijia.pojo.Type;
import com.qf.zhijia.service.*;
import com.qf.zhijia.vo.TableVo;
import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.core.type.TypeReference;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Canaan
 * @version V1.0
 * @data 2020/09/05
 **/
@RestController
@RequestMapping("/zhijia/products")
public class ProductController {

    @Autowired
    ProductService productService;

    @Autowired
    ShowThemeService showThemeService;

    @Autowired
    ThemeService themeService;

    @Autowired
    KindService kindService;

    @Autowired
    TypeService typeService;

    @Autowired
    FunSeacherService funSeacherService;

    /**
     * 商品详情展示
     * @param pId
     * @return
     */
    @RequestMapping("/productDetails")
    public TableVo<Product> tableProduct(Integer pId){
        TableVo<Product> tableVo = new TableVo<>();
        List<Product> productList = new ArrayList<>();
        try {
            Product product = productService.findById(pId);
            productList.add(product);
            tableVo.setMessage("查询成功");
            tableVo.setData(productList);
            return tableVo;
        } catch (Exception e) {
            e.printStackTrace();
        }
        tableVo.setMessage("展示该商品失败！");
        tableVo.setCode(1);
        return tableVo;
    }


    /**
     * 展示所有主题
     * @return
     */
    @RequestMapping("/showTheme")
    public TableVo tableTheme(){
        TableVo tableVo = new TableVo();
        try {
            List<Theme> themeList = showThemeService.findALlTheme();

            tableVo.setData(themeList);
            tableVo.setMessage("查询成功");
            tableVo.setCode(0);
            return tableVo;
        } catch (Exception e) {
            e.printStackTrace();
        }
        tableVo.setMessage("展示主题失败");
        tableVo.setCode(1);
        return tableVo;
    }

    /**
     * 展示所有商品分类
     * 点击分类：展示二级类
     * @return
     */
    @RequestMapping("/kinds")
    public TableVo tableKinds(Integer kId){
        TableVo tableVo = new TableVo();
        try {
            List<Type> kindList = kindService.findAll(kId);
            tableVo.setData(kindList);
            tableVo.setMessage("展示二级类成功");
            return tableVo;
        } catch (Exception e) {
            e.printStackTrace();
        }
        tableVo.setMessage("展示二级类失败！");
        tableVo.setCode(1);
        return tableVo;
    }

    /**
     * 通过主题ID，展示主题中的商品和商品二级类；需要排序
     * @return
     */
    @RequestMapping("/themes")
    public TableVo tableThemeProduct(Integer themeId,Integer sort){
        TableVo tableVo = new TableVo();
        try {
            List<Product> allProduct = themeService.findAllProduct(themeId, sort);
            tableVo.setData(allProduct);
            tableVo.setMessage("展示商品类成功");
            return tableVo;
        } catch (Exception e) {
            e.printStackTrace();
        }
        tableVo.setMessage("展示失败！");
        tableVo.setCode(1);
        return tableVo;
    }

    /**
     * 展示二级类中所有商品；排序展示
     * @param tId
     * @param sort
     * @return
     */
    @RequestMapping("/types")
    public TableVo tableType(Integer tId,Integer sort){
        TableVo tableVo = new TableVo();
        try {
            List<Product> productList = typeService.findAll(tId, sort);
            tableVo.setData(productList);
            tableVo.setMessage("展示成功！");
            return tableVo;
        } catch (Exception e) {
            e.printStackTrace();
        }
        tableVo.setMessage("展示失败！");
        tableVo.setCode(1);
        return tableVo;
    }

    /**
     * 全文检索；返回的是json字符串
     */
    @RequestMapping("/searcher")
    public String sercherProducts(@RequestBody String pName){
        TableVo tableVo = new TableVo();
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            return funSeacherService.searchAll(pName);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 手动同步数据库数据到ES
     */
    @RequestMapping("/mysqlAndES")
    public String mysqlAndES(){
        try {
            List<Product> synchronization = funSeacherService.synchronization();
            return "同步数据库数据到ES成功！";
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return "同步数据库数据到ES失败！";
    }



}
